البرمجة

أنواع البيانات والقيود في SQL

البيانات في SQL: أنواعها والقيود عليها

تُعتبر لغة الاستعلامات البنيوية (SQL – Structured Query Language) من اللغات الأساسية في إدارة قواعد البيانات العلائقية (Relational Databases)، حيث تُستخدم لإنشاء الجداول وتخزين البيانات واسترجاعها وتحديثها وحذفها. ويُعد فهم أنواع البيانات (Data Types) والقيود (Constraints) أحد الأعمدة الأساسية لتصميم قواعد بيانات قوية وفعالة وآمنة.

يمتاز نظام إدارة قواعد البيانات القائم على SQL بالمرونة في التعامل مع أنواع متعددة من البيانات، وفي الوقت نفسه بتوفير أدوات قوية لفرض شروط وضوابط تضمن تكامل البيانات (Data Integrity) وصحتها. في هذا المقال، يتم تناول تفصيلي لأهم أنواع البيانات المعتمدة في SQL والقيود المختلفة التي يمكن فرضها على الجداول، مع أمثلة تطبيقية لتوضيح ذلك.


أولاً: أنواع البيانات في SQL

أنواع البيانات تحدد طبيعة القيم التي يمكن تخزينها في أعمدة الجداول. كل نوع بيانات يسمح بخصائص محددة من حيث الحجم، والدقة، وطريقة المعالجة. يتم تقسيم أنواع البيانات في SQL إلى عدة فئات رئيسية:

1. الأنواع الرقمية (Numeric Data Types)

تُستخدم هذه الأنواع لتخزين الأرقام سواء كانت أعداد صحيحة أو ذات فواصل عشرية:

نوع البيانات الوصف أمثلة
INT أو INTEGER عدد صحيح 32-بت 42، -100، 0
SMALLINT عدد صحيح صغير (16-بت) 32000، -2000
TINYINT عدد صحيح صغير جداً (8-بت) 0 إلى 255
BIGINT عدد صحيح كبير (64-بت) أرقام ضخمة
DECIMAL(p,s) عدد عشري بدقة ثابتة DECIMAL(5,2) يخزن 999.99
NUMERIC(p,s) مماثل لـ DECIMAL
FLOAT عدد عشري بدقة عائمة 3.14159
REAL عدد عشري بدقة أقل من FLOAT 2.718

2. الأنواع النصية (Character and String Data Types)

تُستخدم لتخزين النصوص والكلمات والجمل:

نوع البيانات الوصف أمثلة
CHAR(n) سلسلة نصية بطول ثابت CHAR(10) يخزن 10 رموز
VARCHAR(n) سلسلة نصية بطول متغير VARCHAR(255)
TEXT سلسلة نصية طويلة مقالات، ملاحظات

3. الأنواع المنطقية (Boolean)

نوع البيانات الوصف أمثلة
BOOLEAN يحتوي على قيمتين فقط: TRUE أو FALSE TRUE، FALSE

4. أنواع التاريخ والوقت (Date and Time)

تُستخدم لتخزين بيانات متعلقة بالتواريخ والأوقات:

نوع البيانات الوصف أمثلة
DATE تاريخ فقط ‘2025-06-08’
TIME وقت فقط ’14:35:00′
DATETIME تاريخ ووقت ‘2025-06-08 14:35:00’
TIMESTAMP طابع زمني (مخصص للتعقب) ‘2025-06-08 14:35:00.000000’

5. أنواع البيانات الثنائية (Binary Data Types)

تُستخدم لتخزين البيانات غير النصية، مثل الصور أو الملفات:

نوع البيانات الوصف
BINARY(n) سلسلة بايت بطول ثابت
VARBINARY(n) سلسلة بايت بطول متغير
BLOB كائن ثنائي كبير (Binary Large Object)

ثانياً: القيود في SQL (SQL Constraints)

القيود هي قواعد تُفرض على الأعمدة لضمان صحة البيانات والحفاظ على تكاملها. يمكن تطبيق هذه القيود عند إنشاء الجدول أو تعديله لاحقاً، وتساعد في تقليل الأخطاء وتحقيق الاتساق في قاعدة البيانات.

1. القيد NOT NULL

يُستخدم لمنع العمود من قبول القيم الفارغة (NULL):

sql
CREATE TABLE الموظفين ( id INT NOT NULL, الاسم VARCHAR(100) NOT NULL );

هذا يعني أن كل سجل يجب أن يحتوي على قيمة في كلا العمودين.

2. القيد UNIQUE

يُضمن أن تكون القيم في العمود فريدة وغير مكررة:

sql
CREATE TABLE المستخدمون ( email VARCHAR(255) UNIQUE );

لا يمكن إدخال نفس البريد الإلكتروني مرتين.

3. القيد PRIMARY KEY

يُستخدم لتحديد العمود أو مجموعة الأعمدة التي تميز كل سجل في الجدول:

sql
CREATE TABLE المنتجات ( id INT PRIMARY KEY, الاسم VARCHAR(100) );

المفتاح الأساسي يجمع بين NOT NULL و UNIQUE.

4. القيد FOREIGN KEY

يُستخدم لربط الجداول ببعضها البعض، أي لربط عمود ما بعمود في جدول آخر:

sql
CREATE TABLE الطلبات ( id INT PRIMARY KEY, id_العميل INT, FOREIGN KEY (id_العميل) REFERENCES العملاء(id) );

يساعد هذا القيد في الحفاظ على التكامل المرجعي بين الجداول.

5. القيد CHECK

يُستخدم لفرض شروط على القيم المدخلة في العمود:

sql
CREATE TABLE الطلاب ( العمر INT CHECK (العمر >= 18) );

أي قيمة للعمر يجب أن تكون 18 أو أكثر.

6. القيد DEFAULT

يُحدد قيمة افتراضية إذا لم يتم توفير قيمة أثناء الإدخال:

sql
CREATE TABLE الفواتير ( التاريخ DATE DEFAULT CURRENT_DATE );

إذا لم يُدخل المستخدم قيمة للتاريخ، سيتم تعيين التاريخ الحالي تلقائياً.


ثالثاً: التكامل بين أنواع البيانات والقيود

ينبغي تصميم الجداول بحيث يتم التوافق بين نوع البيانات والقيد المفروض عليها. على سبيل المثال، لا يمكن استخدام قيد CHECK لمقارنة سلسلة نصية بقيمة عددية، أو تعيين قيد UNIQUE على عمود يقبل قيم مكررة. إن دمج أنواع البيانات المناسبة مع القيود الصحيحة يمنح قاعدة البيانات قوة وصلابة تمنع الكثير من الأخطاء.

مثال عملي شامل:

sql
CREATE TABLE الموظفون ( id INT PRIMARY KEY, الاسم VARCHAR(100) NOT NULL, الراتب DECIMAL(10,2) CHECK (الراتب >= 3000), تاريخ_التوظيف DATE DEFAULT CURRENT_DATE, البريد_الإلكتروني VARCHAR(255) UNIQUE );

هذا الجدول يتضمن معظم أنواع القيود الأساسية: مفتاح أساسي، قيد عدم القبول بالقيم الفارغة، قيد الفريدة، قيد التحقق، وقيمة افتراضية.


رابعاً: الفروقات بين أنواع البيانات في أنظمة SQL المختلفة

رغم أن أنواع البيانات والقيود في SQL قياسية، إلا أن بعض أنظمة قواعد البيانات (مثل MySQL، PostgreSQL، SQL Server، Oracle) تختلف قليلاً في التطبيق أو توفر أنواعاً مخصصة:

نوع قاعدة البيانات ملاحظات مميزة
MySQL يسمح باستخدام ENUM وSET كأنواع بيانات
PostgreSQL يدعم أنواع بيانات مخصصة وأنواع JSON
SQL Server يملك أنواع بيانات مثل MONEY و UNIQUEIDENTIFIER
Oracle يستخدم NUMBER بدلاً من INT و VARCHAR2 بدلاً من VARCHAR

خامساً: أهمية اختيار نوع البيانات المناسب

اختيار نوع البيانات المناسب ليس قراراً عشوائياً بل يجب أن يكون مدروساً. استخدام أنواع بيانات أكبر من اللازم يؤدي إلى استهلاك غير مبرر للذاكرة والتخزين، بينما استخدام أنواع ضيقة قد يؤدي إلى فقدان البيانات أو حدوث أخطاء. على سبيل المثال، إذا تم استخدام TINYINT لتخزين أعمار الأشخاص في نظام يتضمن كبار السن، فقد لا تكفي المساحة المتوفرة فيه.

كذلك، استخدام TEXT لتخزين محتوى قصير قد يكون غير مثالي، وقد يؤدي إلى صعوبة في عمليات الفهرسة. لذلك، يجب على مصمم قواعد البيانات أن يوازن بين الأداء، وسهولة المعالجة، ودقة التمثيل.


سادساً: فائدة القيود في أمن وصحة البيانات

القيود تعتبر خط الدفاع الأول ضد إدخال بيانات غير صحيحة. فهي تقلل من الاعتماد على البرامج الخارجية للتحقق من البيانات، مما يجعل قاعدة البيانات أكثر استقلالية وموثوقية. على سبيل المثال، قيد FOREIGN KEY يمنع حذف سجل في الجدول المرتبط ما لم يتم حذف كافة السجلات المرتبطة به، مما يمنع حدوث البيانات اليتيمة (Orphan Records).


سابعاً: الجداول التوضيحية للأنواع والقيود

جدول: مقارنة بين أنواع البيانات النصية

النوع الطول ثابت/متغير الاستخدام المثالي
CHAR(n) n ثابت رموز موحدة الطول مثل رموز الدول
VARCHAR(n) حتى n متغير أسماء، عناوين بريدية
TEXT حتى 2^16 متغير مقالات، وصف مطوّل

جدول: أهم القيود في SQL

القيد الوظيفة أمثلة مناسبة
NOT NULL منع القيم الفارغة الاسم، رقم الهوية
UNIQUE منع التكرار البريد الإلكتروني
PRIMARY KEY تعريف السجل رقم العميل
FOREIGN KEY التكامل المرجعي رقم الطلب مقابل العميل
CHECK شروط إضافية العمر أكبر من 18
DEFAULT قيمة افتراضية التاريخ الحالي

ثامناً: الاعتبارات الأمنية لأنواع البيانات والقيود

من الناحية الأمنية، تساعد القيود على الحماية من إدخال بيانات ضارة مثل SQL Injection، حيث أن تقييد نوع البيانات وقيمها يقلل من احتمالية تنفيذ أوامر ضارة من خلال مدخلات المستخدمين. كذلك، يساعد التحقق الصارم عبر CHECK وNOT NULL وUNIQUE على الحماية من ازدواجية البيانات، ومنع تخزين بيانات ناقصة أو خاطئة.


تاسعاً: الاعتبارات الخاصة بالأداء

اختيار نوع البيانات يؤثر بشكل مباشر على أداء الاستعلامات. استخدام أنواع بيانات دقيقة وصحيحة يقلل من حجم الجداول ويزيد من سرعة الفهرسة والاستعلام. على سبيل المثال، استخدام INT بدلاً من BIGINT عندما يكون ذلك كافياً يقلل من حجم الذاكرة المستهلكة. كما أن استخدام VARCHAR بدلاً من TEXT في الحالات المناسبة يمكن أن يحسّن من أداء البحث والفرز.


المراجع